LaTeX is a programming language for the preparation and editing of documents. It offers consistent and high quality typesetting and its use is widespread in academia, particularly in the fields of mathematics, physics, computer science and other technical disciplines.
The process of document creation in LaTeX differs from conventional word processors in that the user does not edit a representation of the final document, but rather edits a source code file together optionally with additional data files (such as additional text files and/or additional image files). The source file and additional data files can be understood as input files which are compiled to produce the final document. In typical implementations, the final document is output in a portable document format (“pdf”) such as Adobe™ pdf.
The compiling is accomplished by a LaTeX interpreter which executes the commands in the source file and brings in data from additional data files as required in order to produce the final document. The source file may also reference standard packages, which are libraries of source code that can be applied across multiple documents. The LaTeX interpreter, packages and many supporting fonts and programs are usually bundled together and provided in a LaTeX distribution.
This approach to document creation and editing introduces a separation between the edits applied by the user to the source file and their effect on the final document. This separation is reconciled by the step of compiling the document. The separation is relatively easily managed in circumstances in which the document is created and edited locally at a user's computer. In such circumstances, the storage, editing and compiling processes occur in the same place and can thus be closely monitored. However, the system becomes more complex when collaborative creation and editing of documents is desired.
In a basic approach, collaborative editing may be carried out by simply passing source files from author to author, with each author making edits to the source file in turn. The source files can be shared over email, for example. However, this process is not ideal, because if multiple authors wish to work on the document simultaneously, a number of different source files may be generated that each contains an individual author's edits. It can prove difficult and cumbersome to reconcile these into a consolidated source file containing the edits put forward by all authors.
There are solutions known as “version control systems” which are intended to assist in the management of multiple versions of source files that can originate in this way. However, these are relatively difficult to effectively set up, maintain and use. As a result, alternative approaches have been developed. In particular, it has been proposed that rather than provide multiple local versions of source files that are separately edited, authors should access a central version of the source file and edit this directly. In this way, edits from all authors are consolidated from the outset in the central copy of the source files. There are, however, technical difficulties in implementing this approach in a user-friendly way.
These difficulties relate in part to the compiling step necessary for LaTeX documents. Specifically, while the user edits the source file (rather than the final document), it is desirable to provide a real-time, or near real-time, preview of how the final document will appear during the editing process. This allows authors to identify mistakes or formatting imperfections early and ensure that the document progresses as hoped. A genuine “preview” of this kind can only be provided by compiling the document as usual. This requires multiple compiles during the editing process. When documents are managed and edited locally, such multiple compiles are not overly burdensome using conventional personal computers, but when the document is managed and edited remotely each compile occurs on a central server and generates a new document which must subsequently be downloaded to the author. There are resulting pressures on the processing load of the server and on the network bandwidth of the connection between the author and the server.
As a result of the above, existing solutions that rely on central management of the source code are limited by the server's processing capabilities and the bandwidth of the network connection. These limitations become increasingly severe as more users access the service. It would therefore be desirable to limit this hardware restriction.